home *** CD-ROM | disk | FTP | other *** search
/ Aminet 38 / Aminet 38 (2000)(Schatztruhe)[!][Aug 2000].iso / Aminet / util / arc / bzip2_src.lha / bzip2-1.0.0 / dlltest.c < prev    next >
Encoding:
C/C++ Source or Header  |  2000-04-06  |  3.7 KB  |  166 lines

  1. /*
  2.    minibz2
  3.       libbz2.dll test program.
  4.       by Yoshioka Tsuneo(QWF00133@nifty.ne.jp/tsuneo-y@is.aist-nara.ac.jp)
  5.       This file is Public Domain.
  6.       welcome any email to me.
  7.  
  8.    usage: minibz2 [-d] [-{1,2,..9}] [[srcfilename] destfilename]
  9. */
  10.  
  11. #define BZ_IMPORT
  12. #include <stdio.h>
  13. #include <stdlib.h>
  14. #include "bzlib.h"
  15. #ifdef _WIN32
  16. #include <io.h>
  17. #endif
  18.  
  19.  
  20. #ifdef _WIN32
  21.  
  22. #include <windows.h>
  23. static int BZ2DLLLoaded = 0;
  24. static HINSTANCE BZ2DLLhLib;
  25. int BZ2DLLLoadLibrary(void)
  26. {
  27.    HINSTANCE hLib;
  28.  
  29.    if(BZ2DLLLoaded==1){return 0;}
  30.    hLib=LoadLibrary("libbz2.dll");
  31.    if(hLib == NULL){
  32.       puts("Can't load libbz2.dll");
  33.       return -1;
  34.    }
  35.    BZ2DLLLoaded=1;
  36.    BZ2DLLhLib=hLib;
  37.    bzlibVersion=GetProcAddress(hLib,"bzlibVersion");
  38.    bzopen=GetProcAddress(hLib,"bzopen");
  39.    bzdopen=GetProcAddress(hLib,"bzdopen");
  40.    bzread=GetProcAddress(hLib,"bzread");
  41.    bzwrite=GetProcAddress(hLib,"bzwrite");
  42.    bzflush=GetProcAddress(hLib,"bzflush");
  43.    bzclose=GetProcAddress(hLib,"bzclose");
  44.    bzerror=GetProcAddress(hLib,"bzerror");
  45.    return 0;
  46.  
  47. }
  48. int BZ2DLLFreeLibrary(void)
  49. {
  50.    if(BZ2DLLLoaded==0){return 0;}
  51.    FreeLibrary(BZ2DLLhLib);
  52.    BZ2DLLLoaded=0;
  53. }
  54. #endif /* WIN32 */
  55.  
  56. void usage(void)
  57. {
  58.    puts("usage: minibz2 [-d] [-{1,2,..9}] [[srcfilename] destfilename]");
  59. }
  60.  
  61. int main(int argc,char *argv[])
  62. {
  63.    int decompress = 0;
  64.    int level = 9;
  65.    char *fn_r = NULL;
  66.    char *fn_w = NULL;
  67.  
  68. #ifdef _WIN32
  69.    if(BZ2DLLLoadLibrary()<0){
  70.       puts("can't load dll");
  71.       exit(1);
  72.    }
  73. #endif
  74.    while(++argv,--argc){
  75.       if(**argv =='-' || **argv=='/'){
  76.          char *p;
  77.  
  78.          for(p=*argv+1;*p;p++){
  79.             if(*p=='d'){
  80.                decompress = 1;
  81.             }else if('1'<=*p && *p<='9'){
  82.                level = *p - '0';
  83.             }else{
  84.                usage();
  85.                exit(1);
  86.             }
  87.          }
  88.       }else{
  89.          break;
  90.       }
  91.    }
  92.    if(argc>=1){
  93.       fn_r = *argv;
  94.       argc--;argv++;
  95.    }else{
  96.       fn_r = NULL;
  97.    }
  98.    if(argc>=1){
  99.       fn_w = *argv;
  100.       argc--;argv++;
  101.    }else{
  102.       fn_w = NULL;
  103.    }
  104.    {
  105.       int len;
  106.       char buff[0x1000];
  107.       char mode[10];
  108.  
  109.       if(decompress){
  110.          BZFILE *BZ2fp_r = NULL;
  111.          FILE *fp_w = NULL;
  112.  
  113.          if(fn_w){
  114.             if((fp_w = fopen(fn_w,"wb"))==NULL){
  115.                printf("can't open [%s]\n",fn_w);
  116.                perror("reason:");
  117.                exit(1);
  118.             }
  119.          }else{
  120.             fp_w = stdout;
  121.          }
  122.          if((BZ2fp_r == NULL && (BZ2fp_r = BZ2_bzdopen(fileno(stdin),"rb"))==NULL)
  123.             || (BZ2fp_r != NULL && (BZ2fp_r = BZ2_bzopen(fn_r,"rb"))==NULL)){
  124.             printf("can't bz2openstream\n");
  125.             exit(1);
  126.          }
  127.          while((len=BZ2_bzread(BZ2fp_r,buff,0x1000))>0){
  128.             fwrite(buff,1,len,fp_w);
  129.          }
  130.          BZ2_bzclose(BZ2fp_r);
  131.          if(fp_w != stdout) fclose(fp_w);
  132.       }else{
  133.          BZFILE *BZ2fp_w = NULL;
  134.          FILE *fp_r = NULL;
  135.  
  136.          if(fn_r){
  137.             if((fp_r = fopen(fn_r,"rb"))==NULL){
  138.                printf("can't open [%s]\n",fn_r);
  139.                perror("reason:");
  140.                exit(1);
  141.             }
  142.          }else{
  143.             fp_r = stdin;
  144.          }
  145.          mode[0]='w';
  146.          mode[1] = '0' + level;
  147.          mode[2] = '\0';
  148.  
  149.          if((fn_w == NULL && (BZ2fp_w = BZ2_bzdopen(fileno(stdout),mode))==NULL)
  150.             || (fn_w !=NULL && (BZ2fp_w = BZ2_bzopen(fn_w,mode))==NULL)){
  151.             printf("can't bz2openstream\n");
  152.             exit(1);
  153.          }
  154.          while((len=fread(buff,1,0x1000,fp_r))>0){
  155.             BZ2_bzwrite(BZ2fp_w,buff,len);
  156.          }
  157.          BZ2_bzclose(BZ2fp_w);
  158.          if(fp_r!=stdin)fclose(fp_r);
  159.       }
  160.    }
  161. #ifdef _WIN32
  162.    BZ2DLLFreeLibrary();
  163. #endif
  164.    return 0;
  165. }
  166.